www.gusucode.com > matlab从零到进阶程序与数据 > matlab从零到进阶程序与数据/第12章 常微分方程(组)数值求解/examp12_4_3.m
function examp12_4_3 lags = [1,3];%延迟常数向量 history = [0,0,1];%小于初值时的历史函数 tspan = [0,8]; %用nested function构造延迟微分方程组函数 function dy = ddefunNestedFun(t,y,Z) y1d = Z(:,1);%对所有延迟为lags(1)的状态变量的近似 y3d = Z(:,2);%对所有延迟为lags(2)的状态变量的近似 %y3(t-3)的时间延迟了lags(2),而y3又是第三个状态变量,因此y3(t-3)用y3d(3)来表示 %同理,y1(t-1)用y1d(1)来表示。因此得到dy的如下表达式 dy = [0.5*y3d(3)+0.5*y(2)*cos(t); 0.3*y1d(1)+0.7*y(3)*sin(t); y(2)+cos(2*t)]; end sol = dde23(@ddefunNestedFun,lags,history,tspan);%调用dde23求解 %以下画图呈现结果 plot(sol.x,sol.y(1,:),'k-','linewidth',2); hold on plot(sol.x,sol.y(2,:),'k-.','linewidth',2); plot(sol.x,sol.y(3,:),'k-*','linewidth',1); hold off %图例,位置自动选择最佳位置 L = legend('{\ity}_1(t)','{\ity}_2(t)','{\ity}_3(t)','Location','best'); set(L,'fontname','Times New Roman'); xlabel('\itt','fontsize',16);title('方程各解的曲线图') end